iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Mobile Development

Android Studio 30天進階學習系列 第 3

Android Studio 30天進階學習-DAY03_Dagger2_01(架構說明與常見註解標籤)

  • 分享至 

  • xImage
  •  

Dagger2概要說明

參考資料:Android Developers_Android中的依賴項注入

Dagger 是 Google 維護的 Java、Kotlin 和 Android 的熱門依附元件插入程式庫。
Dagger的創立並且發布者是Square
另外相似的Dependency Injection功能也是Google發布的Guice

  • Dagger 可以在你的項目中創建一個依賴關係圖,它可以用來找出在需要時應該從哪裡獲取這些依賴關係。

因為前面有提到何謂Dependency Injection(DI)的概念,這邊就在總結一下DI的好處:
Implementing dependency injection provides you with the following advantages:

  • Reusability of code (程式碼的可重複使用性)
  • Ease of refactoring (容易實施程式碼的重構)
  • Ease of testing (容易測試)

運作流程概要圖

https://ithelp.ithome.com.tw/upload/images/20230913/20150370cFymervoQ3.png

一些常見的註解標籤與意思

這邊註解標籤大致都與常見的 Dependency Injection(DI) 一致。

  • @Inject
    Inject有兩個使用方法:
    • 一種是將其標籤註解在需要引入的Class的方法上,常用在Activity上直接注入。
      https://ithelp.ithome.com.tw/upload/images/20230913/20150370FzUdqAIwJJ.png
    • 另一種是將其標籤註解在 Constructor(建構元) 的上方。
      https://ithelp.ithome.com.tw/upload/images/20230913/20150370MDqA0bKEtz.png
  • @Provide
    這個註解標籤是包在 Module 底下的,對其進行註解並且這些方法都是有返回物件,如下圖所示:
    https://ithelp.ithome.com.tw/upload/images/20230913/201503709nOs7siXST.png
  • @Module
    這個註解標籤是在 Component 底下的,從 Component 定義所包含的模組有那些。
    • Module使用方法
      • 定義在Class上使其成為模組,主要作用是用來集中管理@Provides標記的方法,通常會有一個一般的 類別(Class) 對應 Module,如下圖:
        https://ithelp.ithome.com.tw/upload/images/20230913/20150370VrXKpIDAQ1.png
        https://ithelp.ithome.com.tw/upload/images/20230913/20150370YfeLy6J6tP.png
        https://ithelp.ithome.com.tw/upload/images/20230913/20150370lAFjCnGhZS.png
        https://ithelp.ithome.com.tw/upload/images/20230913/20150370Z4XD8BB6a9.png
  • @Component
    這個註解標籤翻譯過來是組成零件,也就是組成某個物件所需要的東西有什麼,我這邊以學校組成作為例子,如下圖所示:
    https://ithelp.ithome.com.tw/upload/images/20230913/20150370GuExLwUbE4.png

後面會用到的一些標籤

  • @Singleton
    單例化模式,當中有使用一種Double-checked locking(雙重檢查鎖定模式)的方式來檢查是否有被初始化過。
    • 這邊創建一個工人,若沒有加上@Singleton註解標籤,log出來的結果會是兩個不同的人物。

    • 加上@Singleton標籤註解之後,所顯示的Log結果是同一個人物。

創造一個靜態的特殊 method,呼叫這個方法時,先檢查物件是否已被實體化,若已被實體化,直接回傳該物件的一個參照;尚未被實體化的話,就回傳一個新實體的參照。

  • @Named
    大致使用方式:可將其註解在方法或是引入值。
    可以用於以下幾個情況:

    • @Module 注釋的方法上,用於指定Method提供的對象名稱。
    • @Component 注釋的構造器方法上,用於指定將使用哪個 @Module 注釋的方法提供的對象。
  • @Binds
    中文直譯:綁定;綑綁

    • @Binds 注釋必須用於抽象方法上,並且方法必須返回指定的類型。此外,該方法必須位於Module的抽象類別中。
    • 在於綁定單個Class,無法同時輸出多個結果,要同時輸出多個結果必須使用@Provides註解。

以上有了這些前置基礎概念後,明天就要開始撰寫Dagger2的程式碼了。


上一篇
Android Studio30天進階學習-DAY02_Dependency injection(依賴注入)
下一篇
Android Studio 30天進階學習-DAY04_Dagger2_02(架構實作_上)
系列文
Android Studio 30天進階學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言